import helper.Proxy;

import javax.swing.JOptionPane;

import base.AppMemory;

import metar.MetarInfo;
import metar.MetarLogException;
import metar.MetarParseException;
import metar.MetarReader;
import model.WeatherModel;
import dao.DBException;
import dao.WeatherDAO;


/**
 * Dieses Testprogramm lädt die aktuellen Daten von einigen ausgewählten Flughäfen in die DB 
 * @author Michel Metzger, Java-Kurs 2013
 * @version 1.0.0
 *
 */
public class InsertWeatherRun {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		/**
		 * Config.ini laden
		 */
		if (!AppMemory.loadConfig()) {
			System.exit(0);
		}

		/**
		 * ggf. Proxy setzen
		 */
		Proxy.setProxy();

		/**
		 * Mehr oder weniger zufällig ausgewählte Liste von Flughäfen
		 */
		String[] airports = { "EDDS", "KLOZ", "EDDI", "EHAM", "EDDM", "CYMX", "GMMX", "HKMO", "KDAL", "LTAC", "MMAA", "MMMX" };
		
		/**
		 * Zugriff auf die Tabelle mit den Wetterdaten in der DB
		 */
		WeatherDAO dao = new WeatherDAO();

		for (String s : airports) {
			try {
				
				/**
				 * Die daten der Flughäfen abfragen
				 */
				System.out.println("get weather for: " + s + "...");
				WeatherModel wm = new MetarReader(s).getMetarInfo();
				
				/**
				 * und in der Console anzeigen
				 */
				System.out.println("=================================================");
				System.out.println("WeatherModel");
				System.out.println("=================================================");
				System.out.println("cityId=" + wm.getCityID());
				System.out.println("info=" + wm.getInfo());
				System.out.println("observationTime=" + wm.getObservationTime());
				System.out.println("timeStamp=" + wm.getTimeStamp());
				System.out.println("date=" + wm.getDate());
				System.out.println("temperature=" + wm.getTemperature() + "°C");
				System.out.println("airPressure=" + wm.getAirPressure() + "hPa");
				System.out.println("windDirectionInfo=" + wm.getWindDirectionInfo());
				System.out.println("cloudiness=" + wm.getCloudiness());
				System.out.println("visibility=" + wm.getVisibility());
				System.out.println("=================================================\n\n");
				
				System.out.println("store weather for: " + s + "...");

				/**
				 * in der Datenbank speichern 
				 */
				dao.insert(wm);
				System.out.println("stored");

				
			} catch (MetarLogException e) {
				if (MetarInfo.isDebugMode()) {
					e.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, e.getMessage(), "Error while writing logfile", JOptionPane.ERROR_MESSAGE);
				System.exit(0);
			} catch (MetarParseException e) {
				if (MetarInfo.isDebugMode()) {
					e.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, e.getMessage(), "Error while parsing metar info", JOptionPane.ERROR_MESSAGE);
				System.exit(0);
			} catch (DBException e) {
				if (MetarInfo.isDebugMode()) {
					e.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, e.getMessage(), "DB Error", JOptionPane.ERROR_MESSAGE);
				System.exit(0);
			}
		}
	}

}
